public class rotate {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        // 第一步：转置把矩阵按照主对角线翻转，位于 (i,j) 的元素去到 (j,i)
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) { // 遍历对角线下方元素
                int tmp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = tmp;
            }
        }

        // 第二步：行翻转把每一行的内部元素翻转，位于 (j,i) 的元素去到 (j,n−1−i)
        for (int[] row : matrix) {
            for (int j = 0; j < n / 2; j++) { // 遍历左半元素
                int tmp = row[j];
                row[j] = row[n - 1 - j];
                row[n - 1 - j] = tmp;
            }
        }
    }
}
